home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1980-01-01 | 1.3 KB | 46 lines |
- 5 PRINT;"fourier -- k2uyh -- modified for ibm pc -- wa2tif":PRINT
- 10 REM FOURIER
- 15 PI=3.1416
- 20 DIM A(40), B(40), C(40), AM(100): REM PRECISION 5
- 30 T=1: P2=2*PI: NH=30: M=100: DT=T/M
- 40 REM SQUARE WAVE FUNCTION
- 50 REM DEF FNV(X): REM IF X<T/2 THEN FNRETURN 5
- 60 REM IF X=T/2 THEN FNRETURN 2.5
- 70 REM FNEND 0
- 80 REM CALC DC TERM
- 85 GOSUB 350
- 90 S=0: FOR I=0 TO M: TI=I*DT: S=S+FNV(TI): NEXT
- 95 GOSUB 350
- 100 A0=(DT/T)*(S-(FNV(0)+FNV(T))/2): PRINT "A0= ";A0
- 110 REM CALC AC TERMS
- 120 PRINT: PRINT " N", " A(N)", " B(N)", " C(N)"
- 130 FOR N=1 TO NH: AS=0: BS=0
- 140 FOR I=0 TO M: TI=I*DT: NW=P2*TI*N/T
- 145 GOSUB 350
- 150 AS=AS+FNV(TI)*COS(NW): BS=BS+FNV(TI)*SIN(NW): NEXT
- 155 GOSUB 350
- 160 A(N)=2*(DT/T)*(AS-(FNV(0)+FNV(T))/2)
- 170 B(N)=2*(DT/T)*BS: C(N)=SQR(A(N)^2+B(N)^2)
- 180 PRINT N, A(N), B(N), C(N): NEXT
- 190 REM SPECTRUM PLOT
- 200 FOR N=1 TO NH: IF CM<C(N) THEN CM=C(N)
- 210 NEXT: FOR N=1 TO NH: F=N/T: NC=10+INT(50*C(N)/CM)
- 220 PRINT F;: FOR I=10 TO NC: PRINT TAB(I); "*";: NEXT
- 230 PRINT: NEXT
- 240 REM CALC WAVEFORM
- 250 PRINT: PRINT "WAVEFORM"
- 260 FOR I=0 TO M: TI=I*DT: AM(I)=A0: W=P2*TI/T
- 270 FOR N=1 TO NH: AM(I)=AM(I)+A(N)*COS(N*W)+B(N)*SIN(N*W): NEXT
- 280 NEXT
- 290 REM PLOT WAVEFORM
- 300 FOR I=0 TO M: IF MX<AM(I) THEN MX=AM(I)
- 310 IF MN>AM(I) THEN MN=AM(I)
- 320 NEXT: FOR I=0 TO M STEP 2: TI=I*DT
- 330 NA=10+INT(50*(AM(I)-MN)/(MX-MN))
- 340 PRINT TI; TAB(NA); "*": NEXT: END
- 350 IF X=T/2 GOTO 360 ELSE GOTO 370
- 360 DEF FNV(X)=5:RETURN
- 370 IF X=T/2 GOTO 380 ELSE GOTO 390
- 380 DEF FNV(X)=2.5:RETURN
- 390 DEF FNV(X)=0:RETURN
-